/*
 * Copyright 2012-2013 Brian Campbell
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jose4j.keys;

import org.jose4j.lang.ByteUtil;
import org.jose4j.lang.JoseException;

import java.math.BigInteger;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;

/**
 * The example RSA key used in http://tools.ietf.org/html/draft-ietf-jose-json-web-signature
 */
public class ExampleRsaKeyFromJws
{
    public static int [] N_UNSIGNED_BYTES = {161, 248, 22, 10, 226, 227, 201, 180, 101, 206, 141,
            45, 101, 98, 99, 54, 43, 146, 125, 190, 41, 225, 240,
            36, 119, 252, 22, 37, 204, 144, 161, 54, 227, 139,
            217, 52, 151, 197, 182, 234, 99, 221, 119, 17, 230,
            124, 116, 41, 249, 86, 176, 251, 138, 143, 8, 154,
            220, 75, 105, 137, 60, 193, 51, 63, 83, 237, 208, 25,
            184, 119, 132, 37, 47, 236, 145, 79, 228, 133, 119,
            105, 89, 75, 234, 66, 128, 211, 44, 15, 85, 191, 98,
            148, 79, 19, 3, 150, 188, 110, 155, 223, 110, 189,
            210, 189, 163, 103, 142, 236, 160, 198, 104, 247, 1,
            179, 141, 191, 251, 56, 200, 52, 44, 226, 254, 109,
            39, 250, 222, 74, 90, 72, 116, 151, 157, 212, 185,
            207, 154, 222, 196, 199, 91, 5, 133, 44, 44, 15, 94,
            248, 165, 193, 117, 3, 146, 249, 68, 232, 237, 100,
            193, 16, 198, 182, 71, 96, 154, 164, 120, 58, 235,
            156, 108, 154, 215, 85, 49, 48, 80, 99, 139, 131,
            102, 92, 111, 111, 122, 130, 163, 150, 112, 42, 31,
            100, 27, 130, 211, 235, 242, 57, 34, 25, 73, 31, 182,
            134, 135, 44, 87, 22, 245, 10, 248, 53, 141, 154,
            139, 157, 23, 195, 64, 114, 143, 127, 135, 216, 154,
            24, 216, 252, 171, 103, 173, 132, 89, 12, 46, 207,
            117, 147, 57, 54, 60, 7, 3, 77, 111, 96, 111, 158,
            33, 224, 84, 86, 202, 229, 233, 161};
    public static byte[] N_SINGED_BYTES = ByteUtil.convertUnsignedToSignedTwosComp(N_UNSIGNED_BYTES);
    public static BigInteger N = BigEndianBigInteger.fromBytes(N_SINGED_BYTES);

    public static byte[] E_SINGED_BYTES = {1, 0, 1};
    public static BigInteger E = BigEndianBigInteger.fromBytes(E_SINGED_BYTES);

    public static int[] D_UNSIGNED_BYTES = {18, 174, 113, 164, 105, 205, 10, 43, 195, 126, 82,
           108, 69, 0, 87, 31, 29, 97, 117, 29, 100, 233, 73,
           112, 123, 98, 89, 15, 157, 11, 165, 124, 150, 60, 64,
           30, 63, 207, 47, 44, 211, 189, 236, 136, 229, 3, 191,
           198, 67, 155, 11, 40, 200, 47, 125, 55, 151, 103, 31,
           82, 19, 238, 216, 193, 90, 37, 216, 213, 206, 160, 2,
           94, 227, 171, 46, 139, 127, 121, 33, 111, 198, 59,
           234, 86, 39, 83, 180, 6, 68, 198, 161, 81, 39, 217,
           178, 149, 69, 64, 160, 187, 225, 163, 5, 86, 152, 45,
           78, 159, 222, 95, 100, 37, 241, 77, 75, 113, 52, 65,
           181, 93, 199, 59, 155, 74, 237, 204, 146, 172, 227,
           146, 126, 55, 245, 125, 12, 253, 94, 117, 129, 250,
           81, 44, 143, 73, 97, 169, 235, 11, 128, 248, 168, 7,
           70, 114, 138, 85, 255, 70, 71, 31, 52, 37, 6, 59,
           157, 83, 100, 47, 94, 222, 30, 132, 214, 19, 8, 26,
           250, 92, 34, 208, 81, 40, 91, 214, 59, 148, 59, 86,
           93, 137, 138, 5, 104, 84, 19, 229, 60, 60, 108, 101,
           37, 255, 31, 227, 78, 61, 220, 112, 240, 213, 100,
           80, 253, 164, 139, 161, 46, 16, 78, 157, 235, 159,
           184, 24, 129, 225, 196, 189, 242, 93, 146, 71, 244,
           80, 200, 101, 146, 121, 104, 231, 115, 52, 244, 65,
           79, 117, 167, 80, 225, 57, 84, 110, 58, 138, 115,
           157};
    public static byte[] D_SIGNED_BYTES = ByteUtil.convertUnsignedToSignedTwosComp(D_UNSIGNED_BYTES);
    public static BigInteger D = BigEndianBigInteger.fromBytes(D_SIGNED_BYTES);

    public static final RSAPrivateKey PRIVATE_KEY;
    public static final RSAPublicKey PUBLIC_KEY;

    static
    {
        try
        {
            RsaKeyUtil rsaKeyUtil = new RsaKeyUtil();
            PRIVATE_KEY = rsaKeyUtil.privateKey(N, D);
            PUBLIC_KEY = rsaKeyUtil.publicKey(N, E);
        }
        catch (JoseException e)
        {
            throw new IllegalStateException(e.getMessage(),e);
        }
    }


}
